typora-copy-images-to: img

Object类

在JDK中提供了一个Object类,它是类层次结构的根类,每个类都直接或间接继承自该类,所有对象(包括数组)

Object:所有类的根类。Object是不断抽取而来,具备着所有对象都具备的共性内容。

1500704901468

  • getClass().getName()代表返回对象所属类的类名,即Animal。
  • hashCode()代表返回该对象的哈希值。
  • Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示。

其中,hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈希运算,返回一个int类型的哈希值。

示例:

  1. class Person{
  2. private int age ;
  3. Person(int age){
  4. this.age = age;
  5. }
  6. }
  7. class Demo{
  8. }
  9. class ObjectDemo{
  10. public static void main(String[] args){
  11. Person p1 = new Person(20);
  12. Person p2 = new Person(20);
  13. Person p3 = p1;
  14. Demo d = new Demo();
  15. System. out.println(p1 == p2);//false
  16. System. out.println(p1.equals(p2));//false
  17. System. out.println(p1.equals(p3));//true
  18. System. out.println(p1.equals(d));//false
  19. }
  20. }

运行结果:

Object类 - 图2

==以及Object类的equals方法默认都是根据对象的哈希值判断两个对象是否相等。可以通过覆盖Object的equals方法来重写比较规则。

示例:

  1. class Person{
  2. private int age ;
  3. Person( int age){
  4. this.age = age;
  5. }
  6. //比较Person的年龄,是否是同龄人
  7. //一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据。
  8. public boolean equals(Object obj){
  9. if(!(obj instanceof Person))
  10. throw new ClassCastException("类型错误");
  11. Person p = (Person)obj;
  12. return this .age == p.age;
  13. }
  14. }
  15. class ObjectDemo{
  16. public static void main(String[] args){
  17. Person p1 = new Person(20);
  18. Person p2 = new Person(20);
  19. System. out.println(p1.equals(p2));
  20. }
  21. }

运行结果:

Object类 - 图3

Object类的toString方法默认返回的内容是“对象所属的类名+@+对象的哈希值(十六进制)”。

示例:

  1. class Person{
  2. private int age ;
  3. Person(int age){
  4. this.age = age;
  5. }
  6. public int hashCode(){
  7. return age ;
  8. }
  9. }
  10. class ObjectDemo{
  11. public static void main(String[] args){
  12. Person p1 = new Person(20);
  13. System. out.println(p1);
  14. System. out.println(p1.getClass().getName() + " $ " +
  15. Integer.toHexString(p1.hashCode()));
  16. }
  17. }

运行结果:

Object类 - 图4

Java 7 新增的 Objects 类